Skip to content

Don't restore vertical-tabs panel when feature is disabled#9519

Merged
zachbai merged 2 commits into
warpdotdev:masterfrom
webdevtodayjason:webdevtodayjason/fix-vertical-tabs-panel-restore
May 13, 2026
Merged

Don't restore vertical-tabs panel when feature is disabled#9519
zachbai merged 2 commits into
warpdotdev:masterfrom
webdevtodayjason:webdevtodayjason/fix-vertical-tabs-panel-restore

Conversation

@webdevtodayjason

Copy link
Copy Markdown
Contributor

Description

Workspace::initial_vertical_tabs_panel_open (app/src/workspace/view.rs:3726) honored the persisted window_snapshot.vertical_tabs_panel_open value unconditionally when vertical tabs were not usable in the current workspace. If a user previously had vertical tabs enabled with the panel open, then later set appearance.vertical_tabs.enabled = false, restoring the workspace booted with vertical_tabs_panel_open = true while the panel itself never rendered (rendering is gated on should_default_open).

The panel didn't render — but its Dismiss underlay did. The underlay's prevent_interaction_with_other_elements swallowed every click while hover and keyboard input still worked, leaving the window visually responsive but functionally dead. The repeated workspace_view:vertical_tabs_panel position-cache warnings and Dismiss underlay was clicked but no handler was set! log lines reported in the issue come from this state.

Fix

When should_default_open is false (feature flag off OR use_vertical_tabs = false), return false from initial_vertical_tabs_panel_open instead of falling through to the persisted snapshot.

// before
if should_default_open && *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open  // restores stale `true` even when disabled
}

// after
if !should_default_open {
    false  // <-- new
} else if *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open
}

Unrelated existing arms (Empty, FromTemplate, TransferredTab, etc.) already returned should_default_open directly so they were never affected — the bug was specific to the Restored branch.

Testing

Adds test_vertical_tabs_panel_closed_when_disabled_even_if_persisted_open in app/src/workspace/view_test.rs, which reproduces the exact upgrade sequence from the issue:

  1. Enable vertical tabs (feature flag + setting), open the panel, snapshot the workspace.
  2. Disable the use_vertical_tabs setting.
  3. Restore from the open-panel snapshot.
  4. Assert workspace.vertical_tabs_panel_open == false.

Without the fix this test fails — the workspace boots with vertical_tabs_panel_open == true and the click-eating dismiss underlay would paint at runtime.

The existing tests test_vertical_tabs_panel_visibility_restores_from_window_snapshot and test_vertical_tabs_panel_restored_open_when_show_in_restored_windows_enabled both keep use_vertical_tabs = true, so they exercise the unchanged else branches and continue to pass.

Local presubmit note: cargo fmt --check passes locally. Full ./script/presubmit is blocked by Metal Toolchain activation on this machine (downloaded asset not yet active); CI will run the full clippy/nextest matrix.

Server API dependencies

This PR does not depend on any server API changes.

Agent Mode

  • Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fix Warp window becoming unclickable on Linux/Wayland after upgrading with a persisted vertical-tabs panel state — restoring no longer leaves a stale dismiss underlay above the window when vertical tabs are disabled.

Fixes #9505

`Workspace::initial_vertical_tabs_panel_open` honored the persisted
`window_snapshot.vertical_tabs_panel_open` value unconditionally when
the feature was unusable in the current workspace. If a user previously
had vertical tabs enabled and open, then later set
`appearance.vertical_tabs.enabled = false`, restoring the workspace
booted with `vertical_tabs_panel_open = true` while the panel itself
never rendered (gated on `should_default_open`).

The panel didn't render, but its `Dismiss` underlay did — and the
underlay's `prevent_interaction_with_other_elements` swallowed every
click while hover and keyboard input still worked, leaving the window
visually responsive but functionally dead. The repeated
`workspace_view:vertical_tabs_panel` position-cache warnings and
`Dismiss underlay was clicked but no handler was set!` log lines came
from this state.

Fix: when `should_default_open` is false (feature flag off or vertical
tabs disabled in settings), return `false` from
`initial_vertical_tabs_panel_open` instead of falling through to the
persisted snapshot. Adds a regression test covering the exact upgrade
sequence in the report (snapshot panel-open while enabled → disable
setting → restore → assert panel stays closed).

Fixes warpdotdev#9505
@oz-for-oss

oz-for-oss Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

@webdevtodayjason

I'm starting a first review of this pull request.

You can view the conversation on Warp.

I reviewed this pull request and requested human review from: @vorporeal.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR prevents restored workspaces from honoring a stale open vertical-tabs panel snapshot when vertical tabs are unavailable, and adds a regression test for disabling vertical tabs after persisting an open panel state.

Concerns

  • No blocking correctness, security, error-handling, or performance concerns found in the changed lines.

Verdict

Found: 0 critical, 0 important, 0 suggestions

Approve

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@oz-for-oss oz-for-oss Bot requested a review from vorporeal April 30, 2026 00:02
@vorporeal vorporeal requested review from zachbai and removed request for vorporeal April 30, 2026 16:44
@vorporeal

Copy link
Copy Markdown
Contributor

reassigning to @zachbai, who built vertical tabs (and is better positioned to know if this is the right fix)

@captainsafia captainsafia added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label Apr 30, 2026 — with Warp Dev Github Integration
Comment thread app/src/workspace/view.rs
Comment on lines +3737 to 3744
if !should_default_open {
// Stale "panel open" snapshot would leave a click-eating dismiss underlay (#9505).
false
} else if *TabSettings::as_ref(ctx).show_vertical_tab_panel_in_restored_windows {
true
} else {
window_snapshot.vertical_tabs_panel_open
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consider simplifying to

should_default_open && (TabSettings..show_vertical_tab_panel_in_restored_windows || window_snapshot.vertical_tabs_panel_open)?

Co-Authored-By: Oz <oz-agent@warp.dev>
@zachbai zachbai merged commit 3aac007 into warpdotdev:master May 13, 2026
23 checks passed
lawsmd pushed a commit to lawsmd/cortex that referenced this pull request May 22, 2026
…v#9519)

## Description

`Workspace::initial_vertical_tabs_panel_open`
(`app/src/workspace/view.rs:3726`) honored the persisted
`window_snapshot.vertical_tabs_panel_open` value unconditionally when
vertical tabs were not usable in the current workspace. If a user
previously had vertical tabs enabled with the panel open, then later set
`appearance.vertical_tabs.enabled = false`, restoring the workspace
booted with `vertical_tabs_panel_open = true` while the panel itself
never rendered (rendering is gated on `should_default_open`).

The panel didn't render — but its `Dismiss` underlay did. The underlay's
`prevent_interaction_with_other_elements` swallowed every click while
hover and keyboard input still worked, leaving the window visually
responsive but functionally dead. The repeated
`workspace_view:vertical_tabs_panel` position-cache warnings and
`Dismiss underlay was clicked but no handler was set!` log lines
reported in the issue come from this state.

### Fix

When `should_default_open` is `false` (feature flag off OR
`use_vertical_tabs = false`), return `false` from
`initial_vertical_tabs_panel_open` instead of falling through to the
persisted snapshot.

```rust
// before
if should_default_open && *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open  // restores stale `true` even when disabled
}

// after
if !should_default_open {
    false  // <-- new
} else if *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open
}
```

Unrelated existing arms (`Empty`, `FromTemplate`, `TransferredTab`,
etc.) already returned `should_default_open` directly so they were never
affected — the bug was specific to the `Restored` branch.

## Testing

Adds
`test_vertical_tabs_panel_closed_when_disabled_even_if_persisted_open`
in `app/src/workspace/view_test.rs`, which reproduces the exact upgrade
sequence from the issue:

1. Enable vertical tabs (feature flag + setting), open the panel,
snapshot the workspace.
2. Disable the `use_vertical_tabs` setting.
3. Restore from the open-panel snapshot.
4. Assert `workspace.vertical_tabs_panel_open == false`.

Without the fix this test fails — the workspace boots with
`vertical_tabs_panel_open == true` and the click-eating dismiss underlay
would paint at runtime.

The existing tests
`test_vertical_tabs_panel_visibility_restores_from_window_snapshot` and
`test_vertical_tabs_panel_restored_open_when_show_in_restored_windows_enabled`
both keep `use_vertical_tabs = true`, so they exercise the unchanged
`else` branches and continue to pass.

**Local presubmit note:** `cargo fmt --check` passes locally. Full
`./script/presubmit` is blocked by Metal Toolchain activation on this
machine (downloaded asset not yet active); CI will run the full
clippy/nextest matrix.

## Server API dependencies

This PR does not depend on any server API changes.

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fix Warp window becoming unclickable on Linux/Wayland
after upgrading with a persisted vertical-tabs panel state — restoring
no longer leaves a stale dismiss underlay above the window when vertical
tabs are disabled.

Fixes warpdotdev#9505

Co-authored-by: zachbai <zachrybai@gmail.com>
Co-authored-by: Oz <oz-agent@warp.dev>
laomin88 pushed a commit to laomin88/zap that referenced this pull request May 26, 2026
…v#9519)

## Description

`Workspace::initial_vertical_tabs_panel_open`
(`app/src/workspace/view.rs:3726`) honored the persisted
`window_snapshot.vertical_tabs_panel_open` value unconditionally when
vertical tabs were not usable in the current workspace. If a user
previously had vertical tabs enabled with the panel open, then later set
`appearance.vertical_tabs.enabled = false`, restoring the workspace
booted with `vertical_tabs_panel_open = true` while the panel itself
never rendered (rendering is gated on `should_default_open`).

The panel didn't render — but its `Dismiss` underlay did. The underlay's
`prevent_interaction_with_other_elements` swallowed every click while
hover and keyboard input still worked, leaving the window visually
responsive but functionally dead. The repeated
`workspace_view:vertical_tabs_panel` position-cache warnings and
`Dismiss underlay was clicked but no handler was set!` log lines
reported in the issue come from this state.

### Fix

When `should_default_open` is `false` (feature flag off OR
`use_vertical_tabs = false`), return `false` from
`initial_vertical_tabs_panel_open` instead of falling through to the
persisted snapshot.

```rust
// before
if should_default_open && *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open  // restores stale `true` even when disabled
}

// after
if !should_default_open {
    false  // <-- new
} else if *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open
}
```

Unrelated existing arms (`Empty`, `FromTemplate`, `TransferredTab`,
etc.) already returned `should_default_open` directly so they were never
affected — the bug was specific to the `Restored` branch.

## Testing

Adds
`test_vertical_tabs_panel_closed_when_disabled_even_if_persisted_open`
in `app/src/workspace/view_test.rs`, which reproduces the exact upgrade
sequence from the issue:

1. Enable vertical tabs (feature flag + setting), open the panel,
snapshot the workspace.
2. Disable the `use_vertical_tabs` setting.
3. Restore from the open-panel snapshot.
4. Assert `workspace.vertical_tabs_panel_open == false`.

Without the fix this test fails — the workspace boots with
`vertical_tabs_panel_open == true` and the click-eating dismiss underlay
would paint at runtime.

The existing tests
`test_vertical_tabs_panel_visibility_restores_from_window_snapshot` and
`test_vertical_tabs_panel_restored_open_when_show_in_restored_windows_enabled`
both keep `use_vertical_tabs = true`, so they exercise the unchanged
`else` branches and continue to pass.

**Local presubmit note:** `cargo fmt --check` passes locally. Full
`./script/presubmit` is blocked by Metal Toolchain activation on this
machine (downloaded asset not yet active); CI will run the full
clippy/nextest matrix.

## Server API dependencies

This PR does not depend on any server API changes.

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fix Warp window becoming unclickable on Linux/Wayland
after upgrading with a persisted vertical-tabs panel state — restoring
no longer leaves a stale dismiss underlay above the window when vertical
tabs are disabled.

Fixes warpdotdev#9505

Co-authored-by: zachbai <zachrybai@gmail.com>
Co-authored-by: Oz <oz-agent@warp.dev>
(cherry picked from commit 3aac007)
Stoica-Mihai pushed a commit to Stoica-Mihai/warp that referenced this pull request Jun 5, 2026
…v#9519)

## Description

`Workspace::initial_vertical_tabs_panel_open`
(`app/src/workspace/view.rs:3726`) honored the persisted
`window_snapshot.vertical_tabs_panel_open` value unconditionally when
vertical tabs were not usable in the current workspace. If a user
previously had vertical tabs enabled with the panel open, then later set
`appearance.vertical_tabs.enabled = false`, restoring the workspace
booted with `vertical_tabs_panel_open = true` while the panel itself
never rendered (rendering is gated on `should_default_open`).

The panel didn't render — but its `Dismiss` underlay did. The underlay's
`prevent_interaction_with_other_elements` swallowed every click while
hover and keyboard input still worked, leaving the window visually
responsive but functionally dead. The repeated
`workspace_view:vertical_tabs_panel` position-cache warnings and
`Dismiss underlay was clicked but no handler was set!` log lines
reported in the issue come from this state.

### Fix

When `should_default_open` is `false` (feature flag off OR
`use_vertical_tabs = false`), return `false` from
`initial_vertical_tabs_panel_open` instead of falling through to the
persisted snapshot.

```rust
// before
if should_default_open && *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open  // restores stale `true` even when disabled
}

// after
if !should_default_open {
    false  // <-- new
} else if *show_vertical_tab_panel_in_restored_windows {
    true
} else {
    window_snapshot.vertical_tabs_panel_open
}
```

Unrelated existing arms (`Empty`, `FromTemplate`, `TransferredTab`,
etc.) already returned `should_default_open` directly so they were never
affected — the bug was specific to the `Restored` branch.

## Testing

Adds
`test_vertical_tabs_panel_closed_when_disabled_even_if_persisted_open`
in `app/src/workspace/view_test.rs`, which reproduces the exact upgrade
sequence from the issue:

1. Enable vertical tabs (feature flag + setting), open the panel,
snapshot the workspace.
2. Disable the `use_vertical_tabs` setting.
3. Restore from the open-panel snapshot.
4. Assert `workspace.vertical_tabs_panel_open == false`.

Without the fix this test fails — the workspace boots with
`vertical_tabs_panel_open == true` and the click-eating dismiss underlay
would paint at runtime.

The existing tests
`test_vertical_tabs_panel_visibility_restores_from_window_snapshot` and
`test_vertical_tabs_panel_restored_open_when_show_in_restored_windows_enabled`
both keep `use_vertical_tabs = true`, so they exercise the unchanged
`else` branches and continue to pass.

**Local presubmit note:** `cargo fmt --check` passes locally. Full
`./script/presubmit` is blocked by Metal Toolchain activation on this
machine (downloaded asset not yet active); CI will run the full
clippy/nextest matrix.

## Server API dependencies

This PR does not depend on any server API changes.

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fix Warp window becoming unclickable on Linux/Wayland
after upgrading with a persisted vertical-tabs panel state — restoring
no longer leaves a stale dismiss underlay above the window when vertical
tabs are disabled.

Fixes warpdotdev#9505

Co-authored-by: zachbai <zachrybai@gmail.com>
Co-authored-by: Oz <oz-agent@warp.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Window is unclickable after upgrade vertical_tabs_panel layout fails and blocks clicks (Linux/Wayland)

4 participants